/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Presenter;

import DAO.ClienteDAO;
import DAO.PedidoDAO;
import DAO.PlanificacionDAO;
import DAO.ProductoDAO;
import Model.Cliente;
import Model.Pedido;
import Model.Producto;
import Model.PuntoMapa;
import Principals.Utils;
import java.awt.Rectangle;
import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;
import javax.swing.JProgressBar;

/**
 *
 * @author Paola
 */
public class PedidoPresenter {
    public static JProgressBar barrita ;
    
    public static Pedido registrarPedido(Cliente c, Producto p,PuntoMapa pm, String direccion, String referencia) {

        try{
        Pedido pedido = new Pedido();
        pedido.setCliente(c) ;
        pedido.setProducto(p);
        pedido.setPuntoMapa(pm);
        pedido.setFechaRegistro(new Date());
        pedido.setEstado(0);
        pedido.setDireccion(referencia);
        //pedido.setReferencia(referencia);
        PedidoDAO.registrarPedido(pedido); 
        ProductoDAO.disminuirStock(p);
        return pedido;
        }
        catch (Exception e){
            System.out.println("MENSAJE DE ERROR:"+e);
            return null;
        }        
        
    }
    
    public static List<Pedido> buscarPedido( String nombres , String apPaterno , String apMaterno , String docId, String fDesde, String fHasta){
        try{
            if( nombres.isEmpty() ) nombres = null ;
            if( apPaterno.isEmpty() ) apPaterno = null ;
            if( apMaterno.isEmpty() ) apMaterno = null ;
            if( docId.isEmpty() ) docId = null ;
            if( fDesde.isEmpty()) fDesde = null ;
            if( fHasta.isEmpty()) fHasta = null ;
            List <Pedido> lstPedido= PedidoDAO.buscarPedido(fDesde,fHasta);

            if(nombres==null && apPaterno== null && apMaterno==null && docId==null){                    
                return lstPedido;
            }
            else{
                List <Cliente> lstCliente= ClienteDAO.buscarCliente(nombres, apPaterno, apMaterno, docId);
                List <Pedido> lstPedidoC = new ArrayList();
                for( Pedido p : lstPedido ) {
                    //if(p.getCliente().equals(lstCliente.iterator()))
                    if(lstCliente.contains(p.getCliente()))
                    lstPedidoC.add(p);
                }
                return lstPedidoC;                
            }                        
        }
        catch (Exception e){
            System.out.println("MENSAJE DE ERROR:"+e);
            return null;
        }        
                
    }
    
  public static int cantPedidosPendientes(){            
        int pendientes = PedidoDAO.CantidadPedidosPendientes();
        return pendientes;
   }
    
    
    public static List<Pedido> pedidosPendientes(){
        return PedidoDAO.pedidosPendientes() ;
    }
    
   public static List<Pedido> pedidosEnRuta(){
        return PedidoDAO.pedidosEnRuta();
    }
   
    public static Pedido buscarPedidoPorCodigo( int codigoPedido){
        Pedido objPedido;
        try{
            objPedido = PedidoDAO.buscarPedidoporCodigo(codigoPedido);
        }
        catch (Exception e){
            System.out.println("MENSAJE DE ERROR:"+e);
            return null;
        }        
        return objPedido;
        
    }
    
    public static void modificarPedido(Pedido objPedido){
        PedidoDAO.modificarPedido(objPedido);
    }
    
    public static void registrarPedido( String path ){
        try{
            Scanner sc = new Scanner( new File( path ) ) ;
            int N = Integer.parseInt( sc.nextLine() ) ;
            double cantidad = 100 / ((double) N+5) ;
            for(int i = 0 ; i < N ; i++){
                Producto prod = ProductoDAO.cargarProducto( Integer.parseInt( sc.nextLine() ) ) ;
                PuntoMapa punto = PlanificacionDAO.getPuntoMapaById( Integer.parseInt( sc.nextLine() ) ) ;
                Cliente cliente = ClienteDAO.cargarCliente( Integer.parseInt( sc.nextLine() ) ) ;
                String direccion = sc.nextLine() ;
                String fecha = sc.nextLine() ;
                Date fechaRegistro ;
                int estado ;
                
                if( !fecha.equals( "-" ) ){
                    fechaRegistro = Utils.toDate( fecha ) ;
                    estado = 2 ;
                }else{
                    fechaRegistro = Utils.getDateMinutesBefore( 50 ) ;
                    estado = 0 ;
                }
                
                Pedido pedido = new Pedido() ;
                pedido.setProducto( prod ) ;
                pedido.setPuntoMapa( punto ) ;
                pedido.setCliente( cliente ) ;
                pedido.setDireccion( direccion ) ;
                pedido.setFechaRegistro( fechaRegistro ) ;
                pedido.setEstado( estado ) ;
                PedidoDAO.registrarPedido( pedido ) ; 
                ProductoDAO.disminuirStock( prod ) ;
                
                double value = i * cantidad ;
                barrita.setValue( (int) value ) ;
                Rectangle progressRect = barrita.getBounds() ;
                progressRect.x = 0 ;
                progressRect.y = 0 ;
                barrita.paintImmediately( progressRect );
            }
        }catch( Exception e ){
            e.printStackTrace();
            System.out.println( "Error en carga masiva de pedidos" ) ;
        }
    }
}
